#一个文件就是一个类
extends Node#继承一个基类

#类成员变量，在标识符前面加var
var a = 10#整数类型
var b = "Hello World!"#字符串类型
var c = [1,2,3]#数组，格式为中括号[下标]
var d = {"key":"value",2:3}#字典，格式为大括号{键：值}

#常量,在标识符前面加const
const e = 42#数字常量
const f = "字符串常量"

#枚举，大括号里的每个标识符按顺序表示整数：0，1，2，3……
enum {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
enum Named {THING_1,THING_2,THING_3}

#内置向量类型
var g = Vector2(1,2)#2D向量
var h = Vector3(1,2,3)#3D向量

#函数，在标识符前面加func,在标识符后面加小括号()，小括号中是函数的参数，用逗号分隔，最后加冒号：
func some_function(param1,param2):
	var local_variable = 5#在函数中声明的变量是局部变量，不能在函数外使用

#要重写（覆盖）基类函数，只需要和基类同名（标识符相同）就可以
func something(p1,p2):
	.something(p1,p2)#如果要调用同名的基类函数，在函数前面加小数点.

#内部类，一个文件就是一个类，但在文件中也能再声明一个类
class Something:
	var i = 10#内部类的成员变量

func _ready():#在节点添加时首先被调用一次的函数，不是构造函数
	print("运行了ready函数")
	#运算符
	print(c[2])#方括号[]是下标运算符，最高优先级

	#基本类型
	print(null)#无类型:null
	print(true)#布尔类型：bool
	print(a)#整数类型：int
	print(3.14)#浮点数类型：float
	print(b)#字符串类型：String

	#向量类型
	print(g)#2D向量类型：Vector2
	print(h)#3D向量类型：Vector3

	print(Rect2(1,2,3,4))#2D矩形：X，Y，宽，高
	print(Rect2(Vector2(1,2),Vector2(3,4)))#2D矩形：可由两个向量类型作为参数

	print(Transform2D(Vector2(1,2),Vector2(3,4),Vector2(5,6)))#2D变换类型：表示2D空间中的一个或多个变换，比如移动旋转或缩放，由两个向量X轴Y轴和一个原点组成
	print(Transform2D(90,Vector2(1,2)))#2D变换类型：旋转角度（浮点数类型），要环绕旋转的点（2D向量类型）

	print(Plane(1,2,3,4))#3D平面类型：包含正规向量场和标量距离的归一化形式的3D平面类型
	print(Plane(Vector3(1,1,1),Vector3(2,2,2),Vector3(3,3,3)))#3D平面类型

	print(Quat(1,2,3,4))#四元数类型：用于3D旋转，X，Y，Z，W
	print(Quat(Vector3(1,2,3),4))#四元数类型：轴（Vecor3），角度

	print(AABB(Vector3(1,2,3),Vector3(4,5,6)))#边界框类型：一角（3D向量类型）和另一角（3D向量类型），用于3D长方体重叠测试

	#print(Basis(Vector3(1,2,3),90))#3D矩阵类型：用于3D旋转和缩放，目前会报错

	print(Transform(Vector3(1,2,3),Vector3(4,5,6),Vector3(7,8,9),Vector3(0,0,0)))#3D变换类型：表示2D空间中的一个或多个变换，比如移动旋转或缩放，由三个3D向量X轴Y轴Z轴和一个原点组成

	#引擎类型
	print(Color(1,2,3))#颜色类型：包含RGB三个参数
	print(Color(1,2,3,4))#颜色类型：包含RGBA四个参数，A是透明度

	print(NodePath("Node"))#节点路径类型，参数是字符串
	#RID类型（资源的唯一整数编号），Object类型（所有对象的父类，不是基本类型）

	#容器类型
	print(c)#数组类型：下标从0开始则从头计数，下标为负数则从尾部计数
	print(d)#字典类型：通过唯一的键来设置值的类型

#func _process(delta):#每帧运行函数，delta是上一帧到这一帧经过了多少秒

#构造函数，是在ready函数前运行的函数，是类的对象创建时运行的函数
func _init():
	print("运行了init函数")